package com.boot.webflux.repository;

import com.boot.webflux.model.User;
import org.springframework.stereotype.Repository;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.util.Arrays;
import java.util.List;

/**
 * Created by Wuxiang on 2017/12/13.
 *
 * Mono 和 Flux 是由目标反应器提供的响应类型。
 *
 * Mono 是 0 或者任意单个值的发布，Flux 是 0 到任意值的发布。
 *
 * GetUserById() 返回一个 Mono<User> 对象，这个对象不论何时都会返回 0~1 个用户对象
 * GetUsers() 返回一连串变动的用户对象，不论何时都包含 0~n 个用户对象。
 */
@Repository
public class UserRepository {
    private final List<User> users = Arrays.asList(new User(1L, "User1"), new User(2L, "User2"));

    public Mono<User> getUserById(String id) {
        return Mono.justOrEmpty(users.stream().filter(user -> {
            return user.getId().equals(Long.valueOf(id));
        }).findFirst().orElse(null));
    }

    public Flux<User> getUsers() {
        return Flux.fromIterable(users);
    }
}
